package poi;

import java.util.regex.Matcher;

/**
 * 服务保障 解析
 *
 * @author kai
 */
public class ParseDocx2ServiceProtect extends BaseDocumentParse<ServiceProtect> {

    private static final ParseDocx2ServiceProtect INSTANCE = new ParseDocx2ServiceProtect();

    private ParseDocx2ServiceProtect(){}

    public static ParseDocx2ServiceProtect getInstance(){
        return INSTANCE;
    }

    // 服务保障 的 正则
    // 举例：
    // 描述 姓名 + 职位 电话
    // 描述 姓名 +     电话
    // 描述     +     电话
    //               电话
    //  元组1 大的可选元组 描述：必须通过冒号进行隔开 + 冒号
    // *元组2 描述：必须通过冒号进行隔开

    //  元组3 大的可选元组 姓名中间可以加空格进行排版 + 可选空格
    // *元组4 姓名：姓名中间可以加空格进行排版

    // *元组5 职位：若存在职位则职位必须汉字间不能存在空格；姓名和职位必须通过空格进行分割；职位和联系方式可选添加空格。

    // *元组6 手机或者电话号：目前仅支持 3位区号+8位电话号 / 4位区号 + 7/8 位电话 + 11 位手机号
    @Override
    public ServiceProtect parseDocxParagraph(final String paragraph, final TempScanData tempScanData) {
        final ServiceProtect serviceProtect = this.parsed(paragraph);
        // 返回 null 说明不符合正则匹配
        if (serviceProtect == null) {
            // 清空扫描到的职位
            tempScanData.data1 = null;
            return null;
        } else {
            final String column = serviceProtect.getColumn();
            if (column == null) {
                serviceProtect.setColumn(tempScanData.data1);
            } else {
                // 更新临时存储职位信息
                tempScanData.data1 = column;
            }
        }
        return serviceProtect;
    }

    private ServiceProtect parsed(String paragraph) {
        boolean isNotMatch = "".equals(paragraph) || "\n".equals(paragraph) || "\t".equals(paragraph);
        if (isNotMatch) {
            return null;
        }
        Matcher matcher;
        isNotMatch = !(matcher = super.patternList.get(0).matcher(paragraph)).matches();
        if (isNotMatch) {
            return null;
        }
        return new ServiceProtect(RegUtils.replaceAllSpace(matcher.group(nextPosition())),
                RegUtils.replaceAllSpace(matcher.group(nextPosition())),
                matcher.group(nextPosition()),
                matcher.group(nextPosition()));
    }
}
